--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
--------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
scripts/ci/docker-runtime-smoke.sh e41daa5b65e07a5baa1aaad32d97f90482f1cd1c (e41daa5b) Text, 2.35 KB
T8b949e#!/usr/bin/env bash
T8b949e# Build the standard Docker image and verify /api/v1/status over HTTPS inside the container.
Tffa657set -euo pipefail
Te6edf3ROOTTff7b72=Ta5d6ff"Tff7b72$(Tffa657cd Ta5d6ff"Tff7b72$(dirname Ta5d6ff"Te6edf3$0Ta5d6ff"Tff7b72)Ta5d6ff/../..Ta5d6ff" Tff7b72&& Tffa657pwdTff7b72)Ta5d6ff"
Tffa657cd Ta5d6ff"Te6edf3$ROOTTa5d6ff"
Te6edf3IMAGETff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_IMAGETff7b72:-Te6edf3meshchatxTb4b4b4-runtime-smokeTb4b4b4:Te6edf3localTffd700}Ta5d6ff"
Te6edf3CONTAINERTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_CONTAINERTff7b72:-Te6edf3meshchatxTb4b4b4-runtime-smokeTffd700}Ta5d6ff"
Te6edf3HOST_PORTTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_PORTTff7b72:-Te6edf318080Tffd700}Ta5d6ff"
Te6edf3CONFIG_DIRTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_CONFIGTff7b72:-Tff7b72$(mktemp -dTff7b72)Tffd700}Ta5d6ff"
Te6edf3TIMEOUT_SECTff7b72=Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_TIMEOUTTff7b72:-Te6edf3180Tffd700}Ta5d6ff"
cleanupTff7b72(Tff7b72) Tff7b72{
docker rm -f Ta5d6ff"Te6edf3$CONTAINERTa5d6ff" >/dev/null T79c0ff2>Tb4b4b4&T79c0ff1 Tff7b72|| Tffa657true
Tff7b72if Tff7b72[ Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_KEEP_CONFIGTff7b72:-Te6edf30Tffd700}Ta5d6ff" !Tff7b72= Ta5d6ff"1" Tff7b72] Tff7b72&& Tff7b72[ -n Ta5d6ff"Tffd700${Te6edf3TMP_CONFIG_CREATEDTff7b72:-Tffd700}Ta5d6ff" Tff7b72]Tb4b4b4; Tff7b72then
rm -rf Ta5d6ff"Te6edf3$CONFIG_DIRTa5d6ff"
Tff7b72fi
Tff7b72}
Tffa657trap cleanup EXIT
Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$CONFIG_DIRTa5d6ff" Tff7b72= Ta5d6ff"Tff7b72$(mktemp -uTff7b72)Ta5d6ff" Tff7b72] Tff7b72|| Tff7b72[ ! -d Ta5d6ff"Te6edf3$CONFIG_DIRTa5d6ff" Tff7b72]Tb4b4b4; Tff7b72then
:
Tff7b72fi
Tff7b72if Tff7b72[ -z Ta5d6ff"Tffd700${Te6edf3MESHCHAT_DOCKER_SMOKE_CONFIGTff7b72:-Tffd700}Ta5d6ff" Tff7b72]Tb4b4b4; Tff7b72then
Te6edf3TMP_CONFIG_CREATEDTff7b72=T79c0ff1
Tff7b72fi
Tffa657echo Ta5d6ff"Ta5d6ffBuilding Docker image Tffd700${Te6edf3IMAGETffd700}Ta5d6ff...Ta5d6ff"
docker build -f Dockerfile -t Ta5d6ff"Te6edf3$IMAGETa5d6ff" .
cleanup
mkdir -p Ta5d6ff"Te6edf3$CONFIG_DIRTa5d6ff"
Tffa657echo Ta5d6ff"Ta5d6ffStarting container on host port Tffd700${Te6edf3HOST_PORTTffd700}Ta5d6ff...Ta5d6ff"
docker run -d Tffea00\
--name Ta5d6ff"Te6edf3$CONTAINERTa5d6ff" Tffea00\
--init Tffea00\
--user T79c0ff1000:1000 Tffea00\
--security-opt no-new-privileges:true Tffea00\
--cap-drop ALL Tffea00\
--read-only Tffea00\
--tmpfs /tmp:noexec,nosuid,sizeTff7b72=256m Tffea00\
--tmpfs /home/meshchat:nosuid,sizeTff7b72=64m Tffea00\
--cpusTff7b72=T79c0ff2.0 Tffea00\
--memoryTff7b72=1g Tffea00\
--memory-reservationTff7b72=256m Tffea00\
--pids-limitTff7b72=T79c0ff512 Tffea00\
-p Ta5d6ff"Ta5d6ff127.0.0.1:Tffd700${Te6edf3HOST_PORTTffd700}Ta5d6ff:8000Ta5d6ff" Tffea00\
-v Ta5d6ff"Tffd700${Te6edf3CONFIG_DIRTffd700}Ta5d6ff:/configTa5d6ff" Tffea00\
Ta5d6ff"Te6edf3$IMAGETa5d6ff" >/dev/null
Te6edf3deadlineTff7b72=Tff7b72$((Te6edf3SECONDS Tff7b72+ Te6edf3TIMEOUT_SECTff7b72))
Te6edf3status_okTff7b72=T79c0ff0
Tff7b72while Tff7b72[ Ta5d6ff"Te6edf3$SECONDSTa5d6ff" -lt Ta5d6ff"Te6edf3$deadlineTa5d6ff" Tff7b72]Tb4b4b4; Tff7b72do
Tff7b72if curl -fsSk Ta5d6ff"Ta5d6ffhttps://127.0.0.1:Tffd700${Te6edf3HOST_PORTTffd700}Ta5d6ff/api/v1/statusTa5d6ff" >/tmp/meshchatx-docker-status.json T79c0ff2>/dev/nullTb4b4b4; Tff7b72then
Tff7b72if python3 -c Ta5d6ff'import json,sys; d=json.load(open("/tmp/meshchatx-docker-status.json")); sys.exit(0 if d.get("status")=="ok" else 1)'Tb4b4b4; Tff7b72then
Te6edf3status_okTff7b72=T79c0ff1
Tff7b72break
Tff7b72fi
Tff7b72fi
Tff7b72if ! docker ps --format Ta5d6ff'{{.Names}}' Tb4b4b4| grep -qx Ta5d6ff"Te6edf3$CONTAINERTa5d6ff"Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Container exited early. Logs:" >Tb4b4b4&T79c0ff2
docker logs Ta5d6ff"Te6edf3$CONTAINERTa5d6ff" >Tb4b4b4&T79c0ff2 Tff7b72|| Tffa657true
Tffa657exit T79c0ff1
Tff7b72fi
sleep T79c0ff2
Tff7b72done
Tff7b72if Tff7b72[ Ta5d6ff"Te6edf3$status_okTa5d6ff" !Tff7b72= Ta5d6ff"1" Tff7b72]Tb4b4b4; Tff7b72then
Tffa657echo Ta5d6ff"Ta5d6ffTimed out waiting for https://127.0.0.1:Tffd700${Te6edf3HOST_PORTTffd700}Ta5d6ff/api/v1/statusTa5d6ff" >Tb4b4b4&T79c0ff2
docker logs Ta5d6ff"Te6edf3$CONTAINERTa5d6ff" >Tb4b4b4&T79c0ff2 Tff7b72|| Tffa657true
Tffa657exit T79c0ff1
Tff7b72fi
Tffa657echo Ta5d6ff"Ta5d6ffDocker runtime smoke passed: Tff7b72$(cat /tmp/meshchatx-docker-status.jsonTff7b72)Ta5d6ff"
──────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────────